#ifndef NODE_HPP
#define NODE_HPP

#include <string>
#include <vector>
#include <boost/ref.hpp>

// forward declare to prevent circular references
class Edge;
class Graph;

class Node
{
public:
  Node();
  ~Node();
  const std::string& getName() const;
  int getDegree() const;
  // for an edge, the first node is whence the edge starts
  int getInDegree() const;
  int getOutDegree() const;

  friend class Edge;
  friend class Graph;

private:
  // This is just a name. It may have some use.
  std::string name;
  // This is a list of edges associated with this node. It should be
  // populated by the class that uses this.
  std::vector< boost::reference_wrapper< const Edge > > edges;
};

#endif
